//package com.dongzili.binlog.common.config.redis;
//
//
//import lombok.AllArgsConstructor;
//import org.springframework.data.redis.connection.stream.Record;
//import org.springframework.data.redis.connection.stream.RecordId;
//import org.springframework.data.redis.core.RedisTemplate;
//import org.springframework.data.redis.core.ValueOperations;
//import org.springframework.scheduling.annotation.Async;
//import org.springframework.stereotype.Component;
//
//import java.util.Collection;
//import java.util.List;
//import java.util.Map;
//import java.util.Set;
//import java.util.concurrent.TimeUnit;
//
///**
// * spring redis 工具类
// **/
//@SuppressWarnings(value = {"unchecked", "rawtypes"})
//@Component
//@AllArgsConstructor
//public class RedisService<K, V> {
//
//
//    public final RedisTemplate<K, V> redisTemplate;
//
//
//    public void setCacheObject(final K key, final V value) {
//        redisTemplate.opsForValue().set(key, value);
//    }
//
//    @Async
//    public void setCacheObjectAsync(final K key, final V value) {
//        redisTemplate.opsForValue().set(key, value);
//    }
//    @Async
//    public void setCacheObjectAsync(final K key, final V value,final Long timeout) {
//        redisTemplate.opsForValue().set(key, value,timeout, TimeUnit.SECONDS);
//    }
//    /**
//     * 缓存基本的对象，Integer、String、实体类等
//     *
//     * @param key      缓存的键值
//     * @param value    缓存的值
//     * @param timeout  时间
//     * @param timeUnit 时间颗粒度
//     */
//    public void setCacheObject(final K key, final V value, final Long timeout, final TimeUnit timeUnit) {
//        redisTemplate.opsForValue().set(key, value, timeout, timeUnit);
//    }
//
//    /**
//     * 设置有效时间
//     *
//     * @param key     Redis键
//     * @param timeout 超时时间
//     * @return true=设置成功；false=设置失败
//     */
//    public boolean expire(final K key, final long timeout) {
//        return expire(key, timeout, TimeUnit.SECONDS);
//    }
//
//    /**
//     * 设置有效时间
//     *
//     * @param key     Redis键
//     * @param timeout 超时时间
//     * @param unit    时间单位
//     * @return true=设置成功；false=设置失败
//     */
//    public Boolean expire(final K key, final long timeout, final TimeUnit unit) {
//        return redisTemplate.expire(key, timeout, unit);
//    }
//
//    /**
//     * 获得缓存的基本对象。
//     *
//     * @param key 缓存键值
//     * @return 缓存键值对应的数据
//     */
//    public V getCacheObject(final K key) {
//        ValueOperations<K, V> operation = redisTemplate.opsForValue();
//        return operation.get(key);
//    }
//
//    /**
//     * 删除单个对象
//     *
//     * @param key
//     */
//    public Boolean deleteObject(final K key) {
//        return redisTemplate.delete(key);
//    }
//
//    /**
//     * 删除集合对象
//     *
//     * @param collection 多个对象
//     * @return
//     */
//    public Long deleteObject(final Collection collection) {
//        return redisTemplate.delete(collection);
//    }
//
//    /**
//     * 缓存List数据
//     *
//     * @param key      缓存的键值
//     * @param dataList 待缓存的List数据
//     * @return 缓存的对象
//     */
//    public Long setCacheList(final K key, final List<V> dataList) {
//        Long count = redisTemplate.opsForList().rightPushAll(key, dataList);
//        return count == null ? 0 : count;
//    }
//
//    /**
//     * 获得缓存的list对象
//     *
//     * @param key 缓存的键值
//     * @return 缓存键值对应的数据
//     */
//    public List<V> getCacheList(final K key) {
//        return redisTemplate.opsForList().range(key, 0, -1);
//    }
//
//    /**
//     * 缓存Set
//     *
//     * @param key     缓存键值
//     * @param dataSet 缓存的数据
//     * @return 缓存数据的对象
//     */
//    public long setCacheSet(final K key, final V... dataSet) {
//        Long count = redisTemplate.opsForSet().add(key, dataSet);
//        return count == null ? 0 : count;
//    }
//
//    /**
//     * 获得缓存的set
//     *
//     * @param key
//     * @return
//     */
//    public Set<V> getCacheSet(final K key) {
//        return redisTemplate.opsForSet().members(key);
//    }
//
//
//    public String createStreamGroup(K key, String group) {
//        return redisTemplate.opsForStream().createGroup(key, group);
//    }
//
//    public RecordId addStreamMap(K key, Map<K, V> value) {
//        return redisTemplate.opsForStream().add(key, value);
//    }
//
//    public RecordId addStreamRecord(Record<K, ?> record) {
//        return redisTemplate.opsForStream().add(record);
//    }
//
//    public Long streamACK(K key, String group, String... recordIds) {
//        return redisTemplate.opsForStream().acknowledge(key, group, recordIds);
//    }
//
//    public Long delStream(K key, String... recordIds) {
//        return redisTemplate.opsForStream().delete(key, recordIds);
//    }
//
//
//}
